<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns:mml="http://www.w3.org/1998/Math/MathML"
                exclude-result-prefixes="xlink mml">
  <!-- 输出 HTML -->
  <xsl:output doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
              doctype-system="http://www.w3.org/TR/html4/loose.dtd"
              encoding="UTF-8"/>

  <xsl:param name="clickToJumpText" select="''"/>

  <!-- 处理文章根节点 -->
  <xsl:template match="doi_batch">
    <div>
      <div id="article-front" class="article-front">
        <!-- 调试信息 -->
        <!-- <xsl:comment>Graphic var length: <xsl:value-of select="string-length($graphic)"/></xsl:comment>-->
        <xsl:if test="body/journal/journal_article/abstract">
          <hr class="section-rule"/>
          <xsl:for-each select="body/journal/journal_article/abstract">
            <div>
              <xsl:attribute name="class">
                <xsl:text>metadata two-column table metadata-abstract</xsl:text>
                <xsl:choose>
                  <xsl:when test="@language">
                    <xsl:text> metadata-abstract-</xsl:text>
                    <xsl:value-of select="@language"/>
                  </xsl:when>
                  <xsl:otherwise>
                    <xsl:text> metadata-abstract-default</xsl:text>
                  </xsl:otherwise>
                </xsl:choose>
              </xsl:attribute>
              <div class="row">
                <div class="cell">
                  <!-- 解析 CDATA 内容 -->
                  <xsl:apply-templates select="." mode="parse-abstract-cdata"/>
                </div>
              </div>
            </div>
          </xsl:for-each>
        </xsl:if>
      </div>
      <div id="article-body" class="article-body">

        <!-- 解析 CDATA 内容 -->
        <xsl:apply-templates select="body/journal/journal_article/doi_data" mode="parse-doi-cdata"/>

      </div>
    </div>
  </xsl:template>

  <!-- 解析doi_data/resource的 CDATA 内容 -->
  <xsl:template match="doi_data" mode="parse-doi-cdata">
    <xsl:if test="resource">
      <div class="resource-jump-wrap">
        <a class="resource-jump" target="_blank">
          <xsl:attribute name="href">
            <xsl:value-of select="resource"/>
          </xsl:attribute>
          <!--<xsl:value-of select="doi"/>-->
          <xsl:value-of select="$clickToJumpText"/>
        </a>
      </div>
    </xsl:if>
  </xsl:template>


  <!-- 解析 CDATA 内容 -->
  <xsl:template match="abstract" mode="parse-abstract-cdata">
    <xsl:variable name="cdata-content" select="."/>
    <!-- 将 CDATA 内容作为纯文本处理 -->
    <xsl:call-template name="process-html">
      <xsl:with-param name="html" select="$cdata-content"/>
    </xsl:call-template>
  </xsl:template>

  <!-- 递归处理 HTML 内容 -->
  <xsl:template name="process-html">
    <xsl:param name="html"/>
    <xsl:choose>
      <!-- 检测 <sec> 标签 -->
      <xsl:when test="contains($html, '&lt;sec&gt;')">
        <xsl:variable name="before-sec" select="substring-before($html, '&lt;sec&gt;')"/>
        <xsl:variable name="after-sec" select="substring-after($html, '&lt;/sec&gt;')"/>
        <xsl:variable name="sec-content" select="substring-before(substring-after($html, '&lt;sec&gt;'), '&lt;/sec&gt;')"/>
        <!-- 输出 sec 前的内容 -->
        <xsl:value-of select="$before-sec"/>
        <!-- 处理 sec 内容 -->
        <div class="section">
          <xsl:call-template name="process-html">
            <xsl:with-param name="html" select="$sec-content"/>
          </xsl:call-template>
        </div>
        <!-- 递归处理剩余内容 -->
        <xsl:call-template name="process-html">
          <xsl:with-param name="html" select="$after-sec"/>
        </xsl:call-template>
      </xsl:when>
      <!-- 检测 <b> 标签 -->
      <xsl:when test="contains($html, '&lt;b&gt;')">
        <xsl:variable name="before-b" select="substring-before($html, '&lt;b&gt;')"/>
        <xsl:variable name="after-b" select="substring-after($html, '&lt;/b&gt;')"/>
        <xsl:variable name="b-content" select="substring-before(substring-after($html, '&lt;b&gt;'), '&lt;/b&gt;')"/>
        <!-- 输出 b 前的内容 -->
        <xsl:value-of select="$before-b"/>
        <!-- 处理 b 内容 -->
        <h3 class="section-title">
          <xsl:value-of select="$b-content" disable-output-escaping="yes"/>
        </h3>
        <!-- 递归处理剩余内容 -->
        <xsl:call-template name="process-html">
          <xsl:with-param name="html" select="$after-b"/>
        </xsl:call-template>
      </xsl:when>
      <!-- 默认处理：输出剩余内容 -->
      <xsl:otherwise>
        <p>
          <xsl:value-of select="$html" disable-output-escaping="yes"/>
        </p>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!-- 默认处理：保留文本内容 -->
  <xsl:template match="text()">
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>
